女友灵魂一问:鸿蒙OS如何实现跨平台?
以下文章来源于漫话编程 ,作者漫话编程
周末在家休息,女朋友在刷朋友圈,突然她问我:最近我的朋友圈经常被华为刷屏,到底什么是“鸿蒙”啊?
图片来自 Pexels
鸿蒙 OS 回顾
2019 年 8 月 9 日华为开发者大会上,华为消费者业务 CEO 余承东正式宣布发布自有操作系统鸿蒙,内核为 Linux 内核、鸿蒙微内核和 LiteOS。未来将摆脱 Linux 内核和 LiteOS,只有鸿蒙微内核。
鸿蒙(英语:Harmony OS,开发代号 Ark)是华为自 2012 年开发的一款可能兼容 Android App 的跨平台操作系统。
图:鸿蒙 OS 的四大技术特性
鸿蒙 OS 的四大技术特性如下:
分布式架构首次用于终端 OS,实现跨终端无缝协同体验。
确定时延引擎和高性能 IPC 技术实现系统天生流畅。
基于微内核架构重塑终端设备可信安全。
通过统一 IDE 支撑一次开发,多端部署,实现跨终端生态共享。
什么是跨平台
在以前,平台≈操作系统。所以,传统意义上的跨平台即不依赖于操作系统,也不依赖硬件环境。一个操作系统下开发的应用,放到另一个操作系统下依然可以运行。
所以,华为希望鸿蒙 OS 可以运行在各种各样的设备上,所以,鸿蒙 OS 必然需要具备跨平台的能力。
而且,鸿蒙想要做的不仅仅是操作系统可以跨平台,更重要的是要让用户和开发者真正的感受到跨平台。
Java 实现跨平台
先来说说 Java 是如何实现跨平台的。Java 对于跨平台的支持,就像对安全性和网络移动性的支持一样,是分布在整个 Java 体系结构中的。
其中扮演着重要角色的有 Java 语言规范、Class 文件、Java 虚拟机(JVM)等。
首先,在 Java 语言规范中,规定了 Java 语言中基本数据类型的取值范围和行为。
其次,所有 Java 文件要编译成统一的 Class 文件。最后,通过 Java 虚拟机将 Class 文件转成对应平台的二进制文件。
Java 的平台无关性是建立在 Java 虚拟机的平台有关性基础之上的,是因为 Java 虚拟机屏蔽了底层操作系统和硬件的差异。
想要运行一段 Java 代码,要经过多个步骤,将 Java 源代码转换成机器可以执行的机器代码,这个过程主要由虚拟机来完成。
在著名的 HotSpot 虚拟机中,主要有解释执行和即时编译两种形式:
解释执行,逐条将字节码翻译成机器码并执行。
即时编译(Just-in-time ,JIT),将一个方法中包含的所有字节码编译成机器码后再执行。
HotSpot 默认采用混合模式,综合了解释执行和即时编译两者的优点。它会先解释执行字节码,而后将其中反复执行的热点代码(热点检测),以方法为单位进行即时编译。
Android 实现跨平台
当出现不常用的功能时,再调用解释器来翻译;这样速度加快,但每次启动 App 都要重新编译一次,不能一劳永逸。
如此,不用每次打开 App 都需要编译,但安装 App 的时间有点长,而且占用手机空间。
如果 AOT 还没来得及编译或者不能编译,再调用 JIT+ 解释器。这种机制,相当于用时间换空间,既缩短了用户安装 APP 的等待时间,又将虚拟机里编译器和解释器能做的优化提升到最大效率了。
Android 编译的问题
换句话说,在 APK 变成用户可应用的过程中,还经历了一个在 Android 系统内部的编译过程,这是一个绕不过的坎。
鸿蒙实现跨平台
那么,鸿蒙 OS 的代码编译是怎么样的呢?他又是如何解决跨平台的问题的呢?
这就是多终端开发 IDE 所做的事情:
从而使开发者可以基于同一工程高效构建多端自动运行 App,实现真正的一次开发,多端部署,在跨设备之间实现共享生态。
上图就是华为提供的 IDE,在里面可以通过图形化界面拖拽控件,并且 IDE 可以帮助自动适配各种终端设备。
此外,方舟编译器未来将支持多语言统一编译,可大幅提高开发效率。
并且这个编译过程并不是在用户的手机上完成的,而是在应用开发阶段就完成了。
相比 GC,方舟的内存回收是实时的而非集中式的,且不需要暂停应用进程,这样便大大消除了卡顿。
另外,就像 JVM 其实也是支持多种语言一样,华为表示,方舟编译器未来也会支持更多的开发语言。换句话说,其他语言的开发者,日后也能开发基于鸿蒙 OS 的应用。
https://www.jishuwen.com/d/2NN3
https://www.zhihu.com/question/339567108
https://www.cnbeta.com/articles/tech/876171.htm
https://www.cnbeta.com/articles/tech/876919.htm
https://juejin.im/post/5cb07000f265da037d4f9be6
作者:漫话编程
编辑:陶家龙、孙淑娟
出处:转载自微信公众号:漫话编程(ID:mhcoding)
精彩文章推荐: